10 POKE 53281,1 : POKE 53280,1 : PRINT CHR$(144) 20 GOSUB 4000 30 X=0 40 READ A : IF A=255 THEN 60 50 READ B$ : READ C : X=X+1 : GOTO 40 60 DIM DEC%(X),OPCODE$(X),BYTE%(X) 70 DIM AD(255),S$(255),C$(255) 80 ER=X-1 90 RESTORE 100 FOR I=0 TO X-1 : READ DEC%(I) : READ OPCODE$(I) : READ BYTE%(I) 110 NEXT I 120 PRINT CHR$(146);CHR$(147) 130 PRINT "ADRS"; TAB(10);"OPCODE";TAB(25);"OPERAND" 140 FOR X=1 TO 40 : PRINT CHR$(114); : NEXT 150 PRINT 160 REM **************************** 170 REM SET ADDRESS AND INPUT OPCODE 180 REM **************************** 190 SA=0 : PRINT "PRESS TO DEFAULT TO 49152" 200 N=0 210 INPUT "STARTING ADDR";SA : IF SA=0 THEN SA=49152 220 BA=SA 230 PRINT SA;TAB(10); 240 INPUT OC$ : IF OC$="Q" THEN 760 250 C=0 260 IF OC$=OPCODE$(C) THEN D%=DEC%(C) : B%=BYTE%(C) : GOTO 290 270 C=C+1 : IF C>ER THEN PRINT TAB(10);CHR$(18);"ERROR";CHR$(146) : GOTO 230 280 GOTO 260 290 IF B%=1 THEN POKE SA,D% : SA=SA+1 300 IF B%=1 THEN S$(N)=OC$ : AD(N)=SA-1 : N=N+1 : GOTO 230 310 REM ************* 320 REM ENTER OPERAND 330 REM ************* 340 PRINT TAB(25); : PRINT CHR$(145); : INPUT OPR$ 350 AD(N)=SA : S$(N)=OC$ : C$(N)=OPR$ : N=N+1 360 IF LEFT$(OPR$,1)<>"$" THEN OPER=VAL(OPR$) 370 IF LEFT$(OPR$,1)="$" THEN GOSUB 490 380 IF OPER >65535 THEN GOSUB 630 : OPER=0: GOTO 340 390 IF OC$="BNE" OR OC$="BEQ" THEN GOSUB 700 400 IF OPER>255 AND B% <3 THEN GOSUB 560: OPER=0 : GOTO 340 410 IF OPER > 255 THEN GOSUB 640 420 REM ************ 430 REM COMPILE CODE 440 REM ************ 450 IF B%=2 THEN POKE SA,D% : SA=SA + 1 460 IF B%=2 THEN POKE SA,OPER : SA=SA+1 : OPER=0 : GOTO 230 470 POKE SA,D%: SA=SA+1 480 POKE SA,LB : SA=SA+1 : POKE SA,HB : SA=SA+1 : OPER=0 : GOTO 230 490 REM ********************** 500 REM CONVERT HEX TO DECIMAL 510 REM ********************** 520 H$=MID$(OPER$,2) 530 FOR L=1 TO LEN(H$) : HD=ASC(MID$(H$,L,1)) 540 OPER=OPER*16+HD-48+((HD>57)*7) 550 NEXT L : RETURN 560 REM ********** 570 REM ERROR TRAP 580 REM ********** 590 PRINT CHR$(18);"ERROR-MUST BE LESS THAN 256" 600 FOR W=1 TO 400 : NEXT W : PRINTCHR$(146); : PRINT CHR$(145); 610 FOR X=1 TO 27 : PRINTCHR$(32); : NEXT 620 PRINT CHR$(157);CHR$(157);CHR$(145) :RETURN 630 PRINT CHR$(18);"VALUE OVER 65535 ($FFFF)";CHR$(146) : RETURN 640 REM ************************ 650 REM CONVERT TO 2 BYTE NUMBER 660 REM ************************ 670 LB=OPER-INT(OPER/256)*256 680 HB=INT(OPER/256) 690 RETURN 700 REM ************* 710 REM BRANCH OFFSET 720 REM ************* 730 IF SA > OPER THEN OPER= 254-(SA-OPER) 740 IF SA < OPER THEN OPER= (OPER-SA)-2 750 RETURN 760 REM ************** 770 REM ENDING ROUTINE 780 REM ************** 790 NB = SA-BA 800 PRINT CHR$(147) 810 FOR X=1 TO 5 : PRINT : NEXT 820 INPUT"SAVE PROGRAM(Y/N)";AN$ 830 IF AN$="Y" THEN 890 840 PRINT : PRINT : PRINT "PROGRAM IS";NB;"BYTES LONG" 850 PRINT "TO EXECUTE 'SYS'";BA : PRINT 860 INPUT "(B)EGIN AGAIN OR (E)ND";DE$ 870 IF DE$="B" THEN 120 880 PRINT : PRINT"END" : END 890 PRINT CHR$(147) : FOR X=1 TO 5 : PRINT : NEXT 900 LB=BA-INT(BA/256)*256 : HB=INT(BA/256) 910 INPUT "ENTER FILE NAME";NW$:NF$=NW$:NF$="0:"+NF$+STR$(BA)+",P,W" 920 OPEN2,8,2,NF$ 930 PRINT#2,CHR$(LB)+CHR$(HB); 940 FOR X=BA TO SA-1: OC=PEEK(X) 950 PRINT#2,CHR$(OC); 960 NEXT X 970 CLOSE2 980 NF$="" 990 NF$="0:" + NW$+",S,W" 1000 OPEN 9,8,9,NF$ 1010 FOR V=0 TO N-1 1020 PRINT#9,AD(V),S$(V),C$(V) 1030 NEXT V 1040 CLOSE9 1050 GOTO 840 1060 REM *********** 1070 REM OPCODE DATA 1080 REM *********** 1090 DATA 24,CLC,1 1100 DATA 32,JSR,3 1110 DATA 56,SEC,1 1120 DATA 73,EOR#,2 1130 DATA 76,JMP,3 1140 DATA 77,EOR,3 1150 DATA 96,RTS,1 1160 DATA 105,ADC#,2 1170 DATA 108,(JMP),3 1180 DATA 109,ADC,3 1190 DATA 121,ADC-Y,3 1200 DATA 125,ADC-X,3 1210 DATA 129,(STA-X),2 1220 DATA 133,STA-Z,2 1230 DATA 134,STX-Z,2 1240 DATA 136,DEY,1 1250 DATA 138,TXA,1 1260 DATA 140,STY,3 1270 DATA 141,STA,3 1280 DATA 142,STX,3 1290 DATA 145,(STA-Y),2 1300 DATA 148,STY-X,2 1310 DATA 152,TYA,1 1320 DATA 157,STA-X,3 1330 DATA 153,STA-Y,3 1340 DATA 154,TXS,1 1350 DATA 160,LDY#,2 1360 DATA 161,(LDA-X),2 1370 DATA 162,LDX#,2 1380 DATA 164,LDY-Z,2 1390 DATA 165,LDA-Z,2 1400 DATA 166,LDX-Z,2 1410 DATA 168,TAY,1 1420 DATA 169,LDA#,2 1430 DATA 170,TAX,1 1440 DATA 172,LDY,3 1450 DATA 173,LDA,3 1460 DATA 174,LDX,3 1470 DATA 177,(LDA-Y),2 1480 DATA 185,LDA-Y,3 1490 DATA 186,TSX,1 1500 DATA 188,LDY-X,3 1510 DATA 189,LDA-X,3 1520 DATA 190,LDX-Y,3 1530 DATA 192,CPY#,2 1540 DATA 193,(CMP-X),2 1550 DATA 196,CPY-Z,2 1560 DATA 197,CMP-Z,2 1570 DATA 198,DEC-Z,2 1580 DATA 200,INY,1 1590 DATA 201,CMP#,2 1600 DATA 202,DEX,1 1610 DATA 204,CPY,3 1620 DATA 205,CMP,3 1630 DATA 206,DEC,3 1640 DATA 208,BNE,2 1650 DATA 221,CMP-X,3 1660 DATA 222,DEC-X,3 1670 DATA 224,CPX#,2 1680 DATA 230,INC-Z,2 1690 DATA 232,INX,1 1700 DATA 233,SBC#,2 1710 DATA 234,NOP,1 1720 DATA 236,CPX,3 1730 DATA 237,SBC,3 1740 DATA 238,INC,3 1750 DATA 240,BEQ,2 1760 DATA 249,SBC-Y,3 1770 DATA 253,SBC-X,3 1780 DATA 254,INC-X,3 1790 REM ************************ 1800 REM ADD ADDITIONAL DATA HERE 1810 REM ************************ 1820 DATA 255 4000 REM ****** 4010 REM HEADER 4020 REM ****** 4030 PRINT CHR$(147) 4040 LD$="LOADING ARRAY" : FOR X=1 TO 10 : PRINT : NEXT : H=20-LEN(LD$)/2 4050 PRINT TAB(H);CHR$(18);LD$ 4060 RETURN